Everything about Ring Computer Security totally explained
In
computer science,
hierarchical protection domains, often called
protection rings, are a mechanism to protect data and functionality from faults (
fault tolerance) and malicious behaviour (
computer security). This approach is diametrically opposite to that of
capability-based security.
Computer operating systems provide different levels of access to resources. A protection ring is one of two or more hierarchical
levels or
layers of
privilege within the architecture of a
computer system. This is generally hardware-enforced by some
CPU architectures that provide different
CPU modes at the
firmware level. Rings are arranged in a hierarchy from most privileged (most trusted, usually numbered zero) to least privileged (least trusted, usually with the highest ring number). On most operating systems, Ring 0 is the level with the most privileges and interacts most directly with the physical hardware such as the CPU and memory.
Special gates between rings are provided to allow an outer ring to access an inner ring's resources in a predefined manner, as opposed to allowing arbitrary usage. Correctly gating access between rings can improve security by preventing programs from one ring or privilege level from misusing resources intended for programs in another. For example, spyware running as a user program in Ring 1 should be prevented from turning on a web camera without informing the user, since hardware access should be a Ring 0 function reserved for
device drivers. Programs such as web browsers running in higher numbered rings must request access to the network, a resource restricted to a lower numbered ring.
Implementations
Hardware supported rings were among the more revolutionary concepts introduced by the
Multics operating system, a highly secure predecessor of today's
UNIX family of operating systems. However, most general-purpose UNIX systems use only two rings, even if the hardware it runs on provides more
CPU modes than that.
Many modern CPU architectures (including the popular
Intel x86 architecture) include some form of ring protection, although the
Windows NT operating system, like Unix, doesn't fully exploit this feature. Its predecessor,
OS/2, did to some extent, as it used three rings: ring 0 for kernel code and device drivers, ring 2 for privileged code (user programs with I/O access permissions), and ring 3 for unprivileged code (nearly all user programs).
There has been a renewed interest in this design structure, with the proliferation of the
Xen VMM software,
ongoing discussion on monolithic- vs
micro-kernel (particularly in
Usenet newsgroups and
Web forums), Microsoft's
Ring-1 design structure as part of their
NGSCB initiative and
hypervisors embedded in
firmware such as
Intel's
Vanderpool technology.
The original Multics system had eight rings, but many modern systems have fewer. The hardware is aware of the current ring of the executing instruction
thread at all times, thanks to special machine registers. In some systems, areas of virtual memory are also assigned ring numbers in hardware, and/or the most privileged ring is given special capabilities (such as real memory addressing that bypasses the
virtual-memory hardware).
The hardware severely restricts the ways in which control can be passed from one ring to another, and also enforces restrictions on the types of memory access that can be performed across rings. Typically there's a special
gate or
call instruction that transfers control in a secure way towards predefined entry points in lower-level (more trusted) rings; this functions as a supervisor call in many operating systems that use the ring architecture. The hardware restrictions are designed to limit opportunities for accidental or malicious breaches of security.
Ring protection can be combined with processor modes (master/kernel/privileged mode versus slave/user/unprivileged mode) in some systems. Operating systems running on hardware supporting both may use both forms of protection or only one.
Effective use of ring architecture requires close cooperation between hardware and the operating system. Operating systems designed to work on multiple hardware platforms may make only limited use of rings if they're not present on every supported platform. Often the security model is simplified to "kernel" and "user" even if hardware provides finer granularity through rings.
Supervisor mode
In computer terms
supervisor mode (sometimes called kernel mode) is a hardware-mediated flag which can be changed by code running in system-level software. System-level tasks or threads will have this flag set while they're running, whereas user-space applications will not. This flag determines whether it would be possible to execute machine code operations such as modifying registers for various descriptor tables, or performing operations such as disabling interrupts. The idea of having two different modes to operate in comes from "with more control comes more responsibility" - a program in supervisor mode is trusted never to fail, since a failure may cause the whole computer system to crash.
As summarized on
foldoc.org
, supervisor mode is "An execution mode on some processors which enables execution of all instructions, including privileged instructions. It may also give access to a different address space, to memory management hardware and to other peripherals. This is the mode in which the operating system usually runs."
In a monolithic
kernel, the kernel runs in supervisor mode and the applications run in user mode. Other types of
operating systems, like those with an
exokernel or
microkernel don't necessarily share this behavior.
Some examples from the PC world:
» Linux and
Windows are two operating systems that use supervisor/user-mode. To perform specialized functions, user-mode code must perform a
system call into kernel-space (running in supervisor mode) where trusted code in the operating system will perform the needed task.
» DOS, other simple operating systems, and many embedded devices run in supervisor mode permanently, meaning that drivers can be written directly as user programs.
Most processors have at least two different modes. The
x86-processors have four different modes divided into four different rings. Programs that run in Ring 0 can do
anything with the system, and code that runs in Ring 3 should be able to fail at any time without impact to the rest of the computer system. Ring 1 and Ring 2 are rarely used, but could be configured with different levels of access.
Switching from "user mode" to "kernel mode" is, in most existing systems, very expensive. It has been measured, on the basic request
getpid, to cost 1000-1500 cycles on most machines. Of these just around 100 are for the actual switch (70 from user to kernel space, and 40 back), the rest is "kernel overhead". In the
L3 microkernel the minimization of this overhead reduced the overall cost to around 150 cycles.
... it eventually became clear that the hierarchical protection that rings provided didn't closely match the requirements of the system programmer and gave little or no improvement on the simple system of having two modes only. Rings of protection lent themselves to efficient implementation in hardware, but there was little else to be said for them. [...] The attractiveness of fine-grained protection remained, even after it was seen that rings of protection didn't provide the answer... This again proved a blind alley...
Hypervisor mode
Recent CPUs from Intel and AMD offer
x86 virtualization instructions for a
hypervisor to control Ring 0 hardware access. Although they're mutually incompatible, both Intel's "Vanderpool" (or VT) and AMD's "Pacifica" (AMD-V) create a new "Ring -1" so that a guest operating system can run Ring 0 operations natively without affecting other guests or the host OS.
Interoperation between CPU and OS levels of abstraction
Many CPU hardware architectures provide far more flexibility than is exploited by the
operating systems that they normally run. Proper use of complex CPU modes requires very close cooperation between the operating system and the CPU, and thus tends to tie the OS to the CPU architecture. When the OS and the CPU are specifically designed for each other, this isn't a problem (although some hardware features may still be left unexploited), but when the OS is designed to be compatible with multiple, different CPU architectures, a large part of the CPU mode features may be ignored by the OS. For example,
Windows NT was designed to be portable and many architectures at the time only supported user and kernel mode.
Multics was an operating system designed specifically for a special CPU architecture (which in turn was designed specifically for Multics), and it took full advantage of the CPU modes available to it. However, it was an exception to the rule. Today, this high degree of interoperation between the OS and the hardware isn't often cost-effective, despite the potential advantages for security and stability.
Ultimately, the purpose of distinct operating modes for the CPU is to provide hardware protection against accidental or deliberate corruption of the system environment (and corresponding breaches of system security) by software. Only "trusted" portions of system software are allowed to execute in the unrestricted environment of kernel mode, and only then when absolutely necessary. All other software executes in one or more user modes. If a processor generates a fault or exception condition in a user mode, in most cases system stability is unaffected; if a processor generates a fault or exception condition in kernel mode, most operating systems will halt the system with an unrecoverable error. When a hierarchy of modes exists (ring-base security), faults and exceptions at one privilege level may destabilize only the higher-numbered privilege levels. Thus, a fault in Ring 0 (the kernel mode with the highest privilege) will crash the entire system, but a fault in Ring 2 will only affect rings 3 and beyond and Ring 3 itself, at most.
Transitions between modes are at the discretion of the executing
thread when the transition is from a level of high privilege to one of low privilege (as from kernel to user modes), but transitions from lower to higher levels of privilege can take place only through secure, hardware-controlled "gates" that are traversed by executing special instructions or when external interrupts are received.
Microkernel operating systems attempt to minimize the amount of code running in privileged mode, for purposes of
security and
elegance.
Further Information
Get more info on 'Ring Computer Security'.
|
External Link Exchanges
Do you know how hard it is to get a link from a large encyclopaedia? Well we're different and will prove it. To get a link from us just add the following HTML to your site on a relevant page:
<a href="http://ring__computer_security.totallyexplained.com">Ring (computer security) Totally Explained</a>
Then simply click through this link from your web page. Our crawlers will verify your link, extract the title of your web page and instantly add a link back to it. If you like you can remove the words Totally Explained and embed the link in article text.
As long as your link remains in place, we'll keep our link to you right here. Please play fair - our crawlers are watching. Your site must be closely related to this one's topic. Any kind of spamming, dubious practises or removing the link will result in your link from us being dropped and, potentially, your whole site being banned. |